// 文件：src/ch09/minimal.ts
import { StateGraph } from "@langchain/langgraph";
// LangGraph 是 Agent 开发的「工程化工具」

// 声明状态结构
type FlowState = {
  input: string;
  result?: string;
  error?: string;
};

export async function buildMinimalGraph() {
  const graph = new StateGraph<FlowState>({
    channels: {
      input: { value: "" },
      result: { value: "" },
      error: { value: "" },
    },
  });

  graph.addNode("echo", async (s) => ({ result: `ECHO: ${s.input}` }));
  graph.addNode("end", async (s) => s);
  // graph.addEdge("start", "echo");
  graph.setEntryPoint("echo");
  graph.addEdge("echo", "end");

  return graph.compile();
}

async function runMinimalFlow(input: string) {
  // 1. 构建并编译图（获取可执行的工作流实例）
  const graph = await buildMinimalGraph();

  // 2. 输入状态并运行工作流
  // LangGraph 的 run 方法接收初始状态，返回最终状态
  const finalState = await graph.invoke({ input });

  // 3. 输出结果
  console.log("工作流执行结果：", finalState);
  return finalState;
}

// 调用示例：传入输入内容，触发工作流
runMinimalFlow("Hello LangGraph!")
  .catch((err) => console.error("执行出错：", err));